#include "l_Dlinklist2.h"

 


int main(int argc, char const *argv[])
{
    list *table_h=(list*)malloc(sizeof(list));//表头
    pLinklist head=NULL;
    table_h->next=list_Create(head);//创建一个空链表
    list_head_insert(table_h,1);
    list_head_insert(table_h,2);
    list_head_insert(table_h,3);
    list_show_forward(table_h);
   // free(table_h);//释放表头
    return 0;
}
//创建一个空链表
pLinklist list_Create(pLinklist phead)
{
   phead=(pLinklist)malloc(sizeof(linkNode));
   if (phead==NULL)
   {
    return NULL;
   }
   memset(phead,0,sizeof(linkNode));//数据清空
   phead->prior=phead->next=phead;//前驱和后继 都是指向头结点 （有数据的）
   return phead;

}


//向前遍历  双向链表
int list_show_forward(list *L )
{
    if(L->next==NULL)
    {
        return -1;
    }
    //遍历
    pLinklist phead=L->next;//从表头开始遍历
    while (phead->next!=L->next)//
     {
          printf("%d\t",phead->data);
          phead=phead->next;
    }
    printf("%d\t",phead->data);
    return 0;

    
}
//向后遍历
int list_show_behind(pLinklist H)
{

}
//头插
int list_head_insert(list *L, data_type value)
{
    if(L->next==NULL)
    {
        return -1;
    }
    //只有一个头结点 并且头结点没有数据的情况
    if(L->next->prior==L->next->next&&L->next->data==0)//如果data里面有成员是存字符串的话 是可以求长度的  长度为0 
    {
        printf("第一个\n");
     //数据插入
      memcpy(&L->next->data,&value,sizeof(data_type));//复制数据
      return 0;

    }
    
    //不只有一个结点 ，但是结点有数据
    pLinklist newnode=(pLinklist)malloc(sizeof(linkNode));
    memcpy(&newnode->data,&value,sizeof(data_type));//复制数据 给新节点

     //新节点的前驱指向 原来的尾节点  L->next->prior
     newnode->prior=L->next->prior;
     L->next->prior=newnode;//原表头的指向的结点的前驱 指向newnode
    newnode->next=L->next;// 新节点的后继 指向表头指向的结点
    newnode->prior->next=newnode;
    L->next=newnode;//用表头指向newnode
    printf("L->next->data:%d\n",L->next->data);
    return 0;
}
//尾插
int list_tail_insert(pLinklist H, data_type value)
{

}
//指定位置插入
int list_insert(pLinklist H, data_type value, int pos)//将value插入到第pos结点之前
{

}
//销毁链表
pLinklist list_free(pLinklist H)
{

}
